#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

//字符串旋转结果
//写一个函数，判断一个字符串是否为另外一个字符串旋转之后的字符串。
//例如：给定s1 = AABCD和s2 = BCDAA，返回1
//给定s1 = abcd和s2 = ACBD，返回0.
//AABCD左旋一个字符得到ABCDA	A  ABCD     A  DCBA     ABCDA
//
//AABCD左旋两个字符得到BCDAA	AA BCD		AA DCB		BCDAA		先分割逆置再整体逆置
//
//AABCD右旋一个字符得到DAABC	DCBAA       D  CBAA     D  AABC		先整体逆置再分割逆置    

char* Rotate(char* s1, int L,int R)
{
	char* left = &s1[L];
	char* right = &s1[R - 1];
	while (left < right)
	{
		char tmp = 0;
		tmp = *right;
		*right = *left;
		*left = tmp;
		left++;
		right--;
	}
	return s1;
}

char* Left_rotate(char* s1, int ideax,int sz)
{
	Rotate(s1, 0, ideax - 1);
	Rotate(s1, ideax, sz);
	Rotate(s1, 0, sz);
	return s1;
}

char* Right_rotate(char* s1, int ideax,int sz)
{
	Rotate(s1, 0, sz);
	Rotate(s1, 0, ideax - 1);
	Rotate(s1, ideax, sz);
	return s1;
}

int main()
{
	char s1[10], s2[10];
	printf("请输入s1>\n");
	gets(s1);
	printf("请输入s2>\n");
	gets(s2);
	int sz = strlen(s1);
	char* (*p[3])(char*, int, int) = { 0,Left_rotate,Right_rotate };
	for (int i = 1; i <= 2; i++)
	{
		for (int ideax = 1; ideax <= sz; ideax++)
		{
			(*p[i])(s1, ideax, sz);
			if (strcmp(s1, s2) == 0)
			{
				printf("s2为s1旋转后字符串\n");
				return 1;
			}
		}
	}
	printf("s2不为s1旋转后字符串\n");
	return 0;
}


//接口
////旋转函数
//char* Rotate(char* s1, int L, int R)
//{
//	char* left = &s1[L];
//	char* right = &s1[R - 1];
//	while (left < right)
//	{
//		char tmp = 0;
//		tmp = *right;
//		*right = *left;
//		*left = tmp;
//		left++;
//		right--;
//	}
//	return s1;
//}
////左旋函数
//char* Left_rotate(char* s1, int ideax, int sz)
//{
//	Rotate(s1, 0, ideax - 1);
//	Rotate(s1, ideax, sz);
//	Rotate(s1, 0, sz);
//	return s1;
//}
////右旋函数
//char* Right_rotate(char* s1, int ideax, int sz)
//{
//	Rotate(s1, 0, sz);
//	Rotate(s1, 0, ideax - 1);
//	Rotate(s1, ideax, sz);
//	return s1;
//}
//
////判断函数
//int Is_Rotatestr(char* s1, char* s2, int sz1)
//{
//	char* (*p[3])(char*, int, int) = { 0,Left_rotate,Right_rotate };
//	for (int i = 1; i <= 2; i++)
//	{
//		for (int ideax = 1; ideax <= sz1; ideax++)
//		{
//			(*p[i])(s1, ideax, sz1);
//			if (strcmp(s1, s2) == 0)
//			{
//
//				return 1;
//			}
//		}
//	}
//	return 0;
//}